iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
1
自我挑戰組

Go從新學系列 第 24

[DAY 24]GO 的 log.Fatal

  • 分享至 

  • xImage
  •  
  • log.Fatal

Fatal表示程序遇到了致命的錯誤,需要退出,這時候使用Fatal記錄日誌後,然後程序退出,也就是說Fatal相當於先調用Print打印日誌,然後再調用os.Exit(1)退出程序。

總結來說 Fatal 完成:

1.打印輸出內容
2.退出應用程序
3.defer函數不會執行

以下是一個實際例子:

package main

import (
	"fmt"
	"log"
)

func main() {
	var a = 1+1

	if !(a == 2){
		log.Fatal("stop!")
	}

	fmt.Println(a)
}

func init(){
	log.SetPrefix("【IT邦幫忙】")
	log.SetFlags(log.LstdFlags|log.Lshortfile|log.LUTC)
}

執行結果:

2

可以看到 我們初始化變數 a 為 1+1

若 a != 2 的情況下

呼叫 log.Fatal 印出錯誤訊息並中止程式

然而例子中的 a = 2

所以程式正常的執行 fmt.println 函式 印出了 a 的答案


倘若今天 a 我們故意設成 1+2

package main

import (
	"fmt"
	"log"
)

func main() {
	var a = 1+2

	if !(a == 2){
		log.Fatal("stop!")
	}

	fmt.Println(a)
}

func init(){
	log.SetPrefix("【IT邦幫忙】")
	log.SetFlags(log.LstdFlags|log.Lshortfile|log.LUTC)
}

執行結果:

【IT邦幫忙】2019/10/08 16:24:35 log.go:18: stop!

因為 if 判定 a 出錯了

所以 log.Fatal 即時作用 印出錯誤訊息並中止相關程式

也就不會有後續的 fmt.println 的動作

https://ithelp.ithome.com.tw/upload/images/20191009/2012103209dNlLou66.png


上一篇
[DAY 23]GO 的 log.panic
下一篇
[DAY 25]GO 的 String(一)
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言